package com.damon.window;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Set;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.UIManager;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

import com.damon.utils.AppUtil;
import com.damon.utils.GlobalOjbectUtil;

import lombok.Getter;

@Getter
public class WcsWindow extends JFrame {

	private static final long serialVersionUID = 1L;
	private JTextArea textArea = null;// 主要信息打印入口
	private JCheckBox logToFileCheckBox = null;// 写入日志的单选框，用来查看写入日志是否选中。
//	private JCheckBox showHeartbeatLogCheckBox = null;// 显示心跳的单选框
//	private JCheckBox heartbeatCheckBox = null;// 执行心跳检测
	private JLabel dbStatusLabel = null;// 状态栏打印信息入口--数据库信息
	private JLabel deviceStatusLabel = null;// 状态栏打印信息入口--已连接设备信息
//	private JLabel countStatus = null;// 设备计数

	public WcsWindow() {
		init();
	}

	/**
	 * 初始化
	 */
	public void init() {
		setBase();
		setFont();//字体设置要在JTextArea、JToolBar、JPanel、JLabel之前，否则无效
		setText();
		setToolBar();
		setStatusBar();
		end();
	}

	/**
	 * ps:一些窗体的基本设置
	 */
	public void setBase() {

		this.setTitle("WCS-Http-Client"); // 对窗口设置标题
		this.setSize(900, 600); // 设置窗口的大小
		this.setLocationRelativeTo(null); // 设置窗口居中
		// 设置窗口关闭的后的动作
		// DO_NOTHING_ON_CLOSE: 表示在确认关闭窗口之后什么都不做，通过代码处理
		this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		// 主题设置
		try {
			String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
			UIManager.setLookAndFeel(lookAndFeel);
			
		} catch (Exception e) {
			e.printStackTrace();
		}

		
		// 监控关闭按钮,添加关闭前的提示信息
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				if (JOptionPane.showConfirmDialog(null, "要关闭吗?", "提示信息",
						JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION) {
					System.exit(0);
				}
			}
		});
	}
	
	/**
	 *  字体设置
	 */
	public void setFont() {
		//字体设置
		String fontName = "宋体";
//		Font.PLAIN（普通）0
//		Font.BOLD（加粗）1
//		Font.ITALIC（斜体）2
//		Font.BOLD+ Font.ITALIC（粗斜体）3
		int fontStyle = Font.PLAIN;
		int fontSize = 15;
		Font font = new Font(fontName, fontStyle, fontSize);
		UIManager.put("Button.font", font);//按钮字体
		UIManager.put("TextArea.font", font);//主界面字体
		UIManager.put("CheckBox.font", font);//多选框字体
		UIManager.put("Label.font", font);//状态栏界面字体
	}

	/**
	 * ps:内容设置
	 */
	public void setText() {
		textArea = new JTextArea();
		JScrollPane jScrollPaneInfo = new JScrollPane(textArea);
//		textArea.setLineWrap(false); //是否换行:true表示会换行；false表示不换行。默认为false。
//		textArea.setWrapStyleWord(true); //换行策略,setLineWrap()为true才有意义
//		textArea.setText("");
		this.add(jScrollPaneInfo);
	}

	/**
	 * ps:工具栏设置
	 */
	public void setToolBar() {
		JToolBar toolBar = new JToolBar("工具栏"); // 创建工具栏对象
		toolBar.setFloatable(false); // 设置为不允许拖动
		this.add(toolBar, BorderLayout.NORTH);// 设置位置在顶部
		
		// 清日志
		final JButton clearButton = new JButton("清日志"); // 创建按钮对象
		clearButton.addActionListener(new ButtonListener()); // 添加动作事件监听器
		toolBar.add(clearButton); // 添加到工具栏中
		toolBar.addSeparator(); // 添加默认大小的分隔符
		
		// 写入日志
		logToFileCheckBox = new JCheckBox("写入log日志");
		logToFileCheckBox.addActionListener(new ButtonListener());
		logToFileCheckBox.setSelected(true);
		toolBar.add(logToFileCheckBox);
		toolBar.addSeparator(); // 添加指定大小的分隔符
		
		// 重启
		final JButton resetButton = new JButton("重启"); // 创建按钮对象
		resetButton.addActionListener(new ButtonListener()); // 添加动作事件监听器
		toolBar.add(resetButton); // 添加到工具栏中
		toolBar.addSeparator(); // 添加默认大小的分隔符
		
		// 显示设备
		final JButton showDeviceButton = new JButton("显示API信息"); // 创建按钮对象
		showDeviceButton.addActionListener(new ButtonListener()); // 添加动作事件监听器
		toolBar.add(showDeviceButton); // 添加到工具栏中
		toolBar.addSeparator(); // 添加默认大小的分隔符
		
		// 执行心跳检测
//		heartbeatCheckBox = new JCheckBox("心跳超时检测");
//		heartbeatCheckBox.addActionListener(new ButtonListener());
//		heartbeatCheckBox.setSelected(true);
//		toolBar.add(heartbeatCheckBox);
//		toolBar.addSeparator(); // 添加指定大小的分隔符
		
		// 显示心跳日志
//		showHeartbeatLogCheckBox = new JCheckBox("显示心跳时间");
//		showHeartbeatLogCheckBox.addActionListener(new ButtonListener());
//		showHeartbeatLogCheckBox.setSelected(true);
//		toolBar.add(showHeartbeatLogCheckBox);
//		toolBar.addSeparator(); // 添加指定大小的分隔符
		
		//测试
//		JRadioButton tests = new JRadioButton("单选按钮");
//		tests.setSelected(true);
//		toolBar.add(tests);
//		toolBar.addSeparator();
		
}

	/**
	 * ps:状态栏设置
	 */
	public void setStatusBar() {
		JPanel statusBar = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 状态栏
		statusBar.setBorder(new CompoundBorder(new LineBorder(Color.DARK_GRAY), new EmptyBorder(4, 4, 4, 4)));
		dbStatusLabel = new JLabel();
		dbStatusLabel.setText("等待数据库连接！");
		statusBar.add(dbStatusLabel);
		
		deviceStatusLabel = new JLabel();
		deviceStatusLabel.setText("等待创建监控线程！");
		statusBar.add(deviceStatusLabel);
		
//		countStatus = new JLabel();
//		countStatus.setText("等待数据处理！");
//		statusBar.add(countStatus);
		
		add(statusBar, BorderLayout.SOUTH);
	}
	

	/**
	 * 监听事件
	 *
	 */
	private class ButtonListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			// 类型检查
			if (e.getSource() instanceof JButton) {
				JButton button = (JButton) e.getSource();
				String buttonName = button.getText();
				if ("清日志".equals(buttonName)) {
					textArea.setText("");
				}else if("重启".equals(buttonName)) {
					if (JOptionPane.showConfirmDialog(null, "要重启吗?", "提示信息",
							JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION) {
						//getClass().getProtectionDomain().getCodeSource().getLocation().getFile()--生成路径：
						//-----/D:/java/workspace/wcs_printer/target/wcs_printer.jar
						/*
						 * 1、getClass().getProtectionDomain().getCodeSource().getLocation().getFile()
						 *  	生成路劲：/D:/java/workspace/wcs_printer/target/wcs_printer.jar
						 * 2、System.getProperty("java.class.path")
						 * 		生成路径：D:\java\workspace\wcs_printer\target\wcs.jar
						 */
//						String path = getClass().getProtectionDomain().getCodeSource().getLocation().getFile();
						String path = System.getProperty("java.class.path");
//						toolsFunc.restartApplication(System.getProperty("java.class.path"));
						AppUtil.restartApplication(path);
					}
				}else if("显示API信息".equals(buttonName)) {
					Set<String> set = GlobalOjbectUtil.getLiveApiThreadSet();
					textArea.append("\n************************************************已监控API************************************************\n");
//					textArea.append(GlobalOjbectUtil.getConnecteDDeviceSet().toString()+"\n");
					for(String s : set) {
						textArea.append(s + "\n");
					}
					textArea.append("*********************************************************************************************************\n");
				}
			} else if (e.getSource() instanceof JCheckBox) {
				JCheckBox checkBox = (JCheckBox) e.getSource();
				if (checkBox.getText() == "写入log日志") {

					if (checkBox.isSelected()) {
						textArea.append("开始向本地文件中写入日志。。。。。。\n");
					} else {
						textArea.append("停止向本地文件中写入日志。。。。。。\n");
					}
				}
//				else if(checkBox.getText() == "执行心跳检测") {
//					if(checkBox.isSelected() == true) {
//						showHeartbeatLogCheckBox.setSelected(true);
//						showHeartbeatLogCheckBox.setEnabled(true);
//					}else {
//						showHeartbeatLogCheckBox.setSelected(false);
//						showHeartbeatLogCheckBox.setEnabled(false);
//					}
//					
//				}
			}
		}
	}

	/**
	 * ps:需要放到最后加载的代码
	 */
	public void end() {
		this.setVisible(true); // 设置窗口显示,不然无界面;不放在最后还会导致状态栏加载不出来。
	}

//	public static void main(String[] args) {
//
//		System.out.println("打开窗口。。。。。。。");
//		WcsWindow window = new WcsWindow();
//		window.textArea.append("hello\n");
//
//	}

}
